import { EditType } from "@/type/BaseEnum";
import { ref } from "vue";
import useInstance from "@/hooks/useInstance";
import { AddMenuModel, MenuModel } from "@/api/menu/MenuModel";
import { Result } from "@/http/request";
import { addMenuApi, deleteMenApi, editMenuApi } from "@/api/menu/menu";
export default function useMenu(getMenuTable) {
  const { global } = useInstance()
  // ref
  // 这里需要使用show，因为这里是直接作用在父组件上的，是父组件的js文件
  // 所以这里是需要接收子组件的show方法，只有通过子组件暴露出来，父组件才可以接收
  const addMenuRef = ref<{ show: (type: string, row?: MenuModel) => void }>()
  // 新增
  const addBtn = () => {
    console.log('点击新增');
    addMenuRef.value?.show(EditType.ADD)
  }
  // 编辑
  const editBtn = (row: MenuModel) => {
    console.log('点击编辑');
    addMenuRef.value?.show(EditType.EDIT, row)
  }
  // 删除
  const deleteBtn = async (id: number) => {
    console.log('点击删除');
    //信息确定
    let confrim = await global.$myconfirm('确定删除该数据吗?')
    if (confrim) {
      let res = await deleteMenApi(id);
      if (res && res.code == 200) {
        //信息提示
        global.$message({ message: res.msg, type: 'success' })
        //刷新表格
        getMenuTable();
      }
    }
  }
  // 保存
  const save = async (parm: AddMenuModel) => {
    console.log('传递过来的父组件的值', parm);
    let res: Result
    if (parm.editType == EditType.ADD) {
      res = await addMenuApi(parm)
    } else {
      res = await editMenuApi(parm)
    }
    if (res && res.code == 200) {
      //信息提示
      global.$message({ message: res.msg, type: 'success' })
      //刷新表格
      getMenuTable();
    }
  }
  return {
    addBtn,
    editBtn,
    deleteBtn,
    save,
    addMenuRef
  }
}